【原创】数据挖掘案例 您所在的位置:网站首页 relieff matlab 【原创】数据挖掘案例

【原创】数据挖掘案例

2024-04-08 16:57| 来源: 网络整理| 查看: 265

  数据挖掘方法的提出,让人们有能力最终认识数据的真正价值,即蕴藏在数据中的信息和知识。数据挖掘  (DataMiriing) ,指的是从大型数据库或数据仓库中提取人们感兴趣的知识,这些知识是隐含的、事先未知的潜在有用信息,数据挖掘是目前国际上,数据库和信息决策领域的最前沿研究方向之一。因此分享一下很久以前做的一个小研究成果。也算是一个简单的数据挖掘处理的例子。 1.数据挖掘与聚类分析概述 

数据挖掘一般由以下几个步骤: 

(l)分析问题:源数据数据库必须经过评估确认其是否符合数据挖掘标准。以决定预期结果,也就选择了这项工作的最优算法。 

(2)提取、清洗和校验数据:提取的数据放在一个结构上与数据模型兼容的数据库中。以统一的格式清洗那些不一致、不兼容的数据。一旦提取和清理数据后,浏览所创建的模型,以确保所有的数据都已经存在并且完整。

(3)创建和调试模型:将算法应用于模型后产生一个结构。浏览所产生的结构中数据,确认它对于源数据中“事实”的准确代表性,这是很重要的一点。虽然可能无法对每一个细节做到这一点,但是通过查看生成的模型,就可能发现重要的特征。 

(4)查询数据挖掘模型的数据:一旦建立模型,该数据就可用于决策支持了。 

(5)维护数据挖掘模型:数据模型建立好后,初始数据的特征,如有效性,可能发生改变。一些信息的改变会对精度产生很大的影响,因为它的变化影响作为基础的原始模型的性质。因而,维护数据挖掘模型是非常重要的环节。 

  聚类分析是数据挖掘采用的核心技术,成为该研究领域中一个非常活跃的研究课题。聚类分析基于”物以类聚”的朴素思想,根据事物的特征,对其进行聚类或分类。作为数据挖掘的一个重要研究方向,聚类分析越来越得到人们的关注。聚类的输入是一组没有类别标注的数据,事先可以知道这些数据聚成几簇爪也可以不知道聚成几簇。通过分析这些数据,根据一定的聚类准则,合理划分记录集合,从而使相似的记录被划分到同一个簇中,不相似的数据划分到不同的簇中。

2.特征选择与聚类分析算法

Relief为一系列算法,它包括最早提出的Relief以及后来拓展的ReliefF和RReliefF,其中RReliefF算法是针对目标属性为连续值的回归问题提出的,下面仅介绍一下针对分类问题的Relief和ReliefF算法。

2.1 Relief算法 

Relief算法最早由Kira提出,最初局限于两类数据的分类问题。Relief算法是一种特征权重算法(Feature weighting algorithms),根据各个特征和类别的相关性赋予特征不同的权重,权重小于某个阈值的特征将被移除。Relief算法中特征和类别的相关性是基于特征对近距离样本的区分能力。算法从训练集D中随机选择一个样本R,然后从和R同类的样本中寻找最近邻样本H,称为Near Hit,从和R不同类的样本中寻找最近邻样本M,称为NearMiss,然后根据以下规则更新每个特征的权重:如果R和Near Hit在某个特征上的距离小于R和Near Miss上的距离,则说明该特征对区分同类和不同类的最近邻是有益的,则增加该特征的权重;反之,如果R和Near Hit在某个特征的距离大于R和Near Miss上的距离,说明该特征对区分同类和不同类的最近邻起负面作用,则降低该特征的权重。以上过程重复m次,最后得到各特征的平均权重。特征的权重越大,表示该特征的分类能力越强,反之,表示该特征分类能力越弱。Relief算法的运行时间随着样本的抽样次数m和原始特征个数N的增加线性增加,因而运行效率非常高。具体算法如下所示:

2.2 ReliefF算法

由于Relief算法比较简单,但运行效率高,并且结果也比较令人满意,因此得到广泛应用,但是其局限性在于只能处理两类别数据,因此1994年Kononeill对其进行了扩展,得到了ReliefF作算法,可以处理多类别问题。该算法用于处理目标属性为连续值的回归问题。ReliefF算法在处理多类问题时,每次从训练样本集中随机取出一个样本R,然后从和R同类的样本集中找出R的k个近邻样本(near Hits),从每个R的不同类的样本集中均找出k个近邻样本(near Misses),然后更新每个特征的权重,如下式所示:

Relief系列算法运行效率高,对数据类型没有限制,属于一种特征权重算法,算法会赋予所有和类别相关性高的特征较高的权重,所以算法的局限性在于不能有效的去除冗余特征。 

2.3 K-means聚类算法

由于聚类算法是给予数据自然上的相似划法,要求得到的聚类是每个聚类内部数据尽可能的相似而聚类之间要尽可能的大差异。所以定义一种尺度来衡量相似度就显得非常重要了。一般来说,有两种定义相似度的方法。第一种方法是定义数据之间的距离,描述的是数据的差异。第二种方法是直接定义数据之间的相似度。下面是几种常见的定义距离的方法: 

1.Euclidean距离,这是一种传统的距离概念,适合于2、3维空间。 

2.Minkowski距离,是Euclidean距离的扩展,可以理解为N维空间的距离。 

聚类算法有很多种,在需要时可以根据所涉及的数据类型、聚类的目的以及具的应用要求来选择合适的聚类算法。下面介绍 K-means聚类算法: 

K-means算法是一种常用的基于划分的聚类算法。K-means算法是以k为参数,把n个对象分成k个簇,使簇内具有较高的相似度,而簇间的相似度较低。K-means的处理过程为:首先随机选择k个对象作为初始的k个簇的质心;然后将余对象根据其与各个簇的质心的距离分配到最近的簇;最后重新计算各个簇的质心。不断重复此过程,直到目标函数最小为止。簇的质心由公式下列式子求得:

在具体实现时,为了防止步骤2中的条件不成立而出现无限循环,往往定义一个最大迭代次数。K-means尝试找出使平方误差函数值最小的k个划分。当数据分布较均匀,且簇与簇之间区别明显时,它的效果较好。面对大规模数据集,该算法是相对可扩展的,并且具有较高的效率。其中,n为数据集中对象的数目,k为期望得到的簇的数目,t为迭代的次数。通常情况下,算法会终止于局部最优解。但用,例如涉及有非数值属性的数据。其次,这种算法要求事先给出要生成的簇的数目k,显然这对用户提出了过高的要求,并且由于算法的初始聚类中心是随机选择的,而不同的初始中心对聚类结果有很大的影响。另外,K-means算法不适用于发现非凸面形状的簇,或者大小差别很大的簇,而且它对于噪音和孤立点数据是敏感的。

3.一个医学数据分析实例 3.1 数据说明 

本文实验数据来自著名的UCI机器学习数据库,该数据库有大量的人工智能数据挖掘数据,网址为:http://archive.ics.uci.edu/ml/。该数据库是不断更新的,也接受数据的捐赠。数据库种类涉及生活、工程、科学各个领域,记录数也是从少到多,最多达几十万条。截止2010年底,数据库共有199个数据集,每个数据集合中有不同类型、时间的相关数据。可以根据实际情况进行选用。 

本文选用的数据来类型为:Breast Cancer Wisconsin (Original) Data Set,中文名称为:威斯康星州乳腺癌数据集。这些数据来源美国威斯康星大学医院的临床病例报告,每条数据具有11个属性。下载下来的数据文件格式为“.data”,通过使用Excel和Matlab工具将其转换为Matlab默认的数据集保存,方便程序进行调用。

 下表是该数据集的11个属性名称及说明:

 

对上述数据进行转换后,以及数据说明可知,可以用于特征提取的有9个指标,样品编号和分类只是用于确定分类。本文的数据处理思路是先采用ReliefF特征提取算法计算各个属性的权重,剔除相关性最小的属性,然后采用K-means聚类算法对剩下的属性进行聚类分析。

3.2 数据预处理与程序 

本文在转换数据后,首先进行了预处理,由于本文的数据范围都是1-10,因此不需要归一化,但是数据样本中存在一些不完整,会影响实际的程序运行,经过程序处理,将这一部分数据删除。这些不完整的数据都是由于实际中一些原因没有登记或者遗失的,以“?”的形式代表。 

本文采用Matlab软件进行编程计算。根据第三章提到的ReliefF算法过程,先编写ReliefF函数程序,用来计算特征属性,再编写主程序,在主程序中调用该函数进行计算,并对结果进行分析,绘图,得到有用的结论。

程序统一在最后贴出。

3.3 乳腺癌数据集特征提取 

本文采用3.1节中的ReliefF算法来计算各个特征的权重,权重小于某个阈值的特征将被移除,针对本文的实际情况,将对权重最小的2-3种剔除。由于算法在运行过程中,会选择随机样本R,随机数的不同将导致结果权重有一定的出入,因此本文采取平均的方法,将主程序运行20次,然后将结果汇总求出每种权重的平均值。如下所示,列为属性编号,行为每一次的计算结果: 

下面是特征提取算法计算的特征权重趋势图,计算20次的结果趋势相同:

上述结果是否运行主程序所得的计算结果,看起来不直观,下面将其按照顺序绘图,可以直观显示各个属性权重的大小分布,如下图所示:

  

按照从小到大顺序排列,可知,各个属性的权重关系如下:

  属性90.5) %说明第1类属于良性,则a的值就是良性中判断正确的个数 19    totalSum = totalSum + a ; 20    rate1 = a/length(d2) ; 21    %然后加上恶性中判断正确的比例 22    totalSum = totalSum + sum(data(idx==2,11)==4) ; 23    rate2 = sum(data(idx==2,11)==4)/length(data(idx==2,11)) ; 24   else %说明第1类属于恶性 25    totalSum = totalSum + sum(data(idx==1,11)==4) ; 26    totalSum = totalSum + sum(data(idx==2,11)==2) ; 27    rate1 = sum(data(idx==2,11)==2)/length(data(idx==2,11)) ; 28    rate2 = sum(data(idx==1,11)==4)/length(data(idx==1,11)) ; 29   end 30    x1 =1;%第x1个属性 31   x2 =1 ;%第x2个属性 32   plot(1:sum(idx==1),data1(idx==1,x1),'r.','MarkerSize',12); 33   hold on ; 34   plot(sum(idx==1)+1:sum(idx==1)+sum(idx==2),data1(idx==2,x1),'b.','MarkerSize',12); 35   xlabel('记录数'); 36   ylabel('属性值'); 37   title('属性9的值分布'); 38   legend('第一类','第二类'); 39   axis([0 640 0 10]) 40   rate = totalSum/size(t,1) %总的判断准确率

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有